{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_train = pd.read_csv('engineered_data_train.csv')\n",
    "data_test = pd.read_csv('engineered_data_test.csv')\n",
    "\n",
    "X_train = data_train.drop('Y', axis=1)\n",
    "y_train = data_train['Y']\n",
    "\n",
    "X_test = data_test.drop('Y', axis=1)\n",
    "y_test = data_test['Y']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "            max_depth=20, max_features='auto', max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, n_estimators=500, n_jobs=None,\n",
       "            oob_score=False, random_state=49, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "# Instantiate model with 1000 decision trees\n",
    "rf = RandomForestClassifier(n_estimators = 500, random_state = 49, max_depth=20)\n",
    "# Train the model on training data\n",
    "rf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9573482054984469"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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tDTXkQA4RskOAcVenz5evVNnNOaLMgCEm507d6pLly5avny5pkyZop49e7qOBCAEULJDwPpdBdqeW6yeZ53gOgoAoJr++c9/auXKlXrvvffUrVs313EAhAhmskPAzn07ixxXm+37ACDcPPjgg/rkk08o2AAOQskOAbv27ZFdP4WZbAAIBxs2bFCvXr20bds2xcXF6eyzz3YdCUCIYVwkBOzMLSvZ9ZLjHScBABzJ2rVrlZGRoV27dmn9+vU67rjjXEcCEIIo2SFgV36JYoyUXouSDQChbPXq1crIyFBeXp7mz5+vdu3auY4EIERRskPAzrwS1U2OlyfGuI4CAKjEjz/+qE6dOqmkpEQLFixQ27ZtXUcCEMKYyQ4B23OKmMcGgBCXnp6uU045RQsXLqRgAzgiVrJDwMqtuTq3WR3XMQAAFVi1apWaN2+uhg0bauHCha7jAAgTrGQ7tie/RJv2FqpNo9quowAADvHFF1/o/PPP15133uk6CoAwQ8l2bPmWHElSm0ac9ggAoeSzzz5TZmam0tLSNHz4cNdxAIQZSrZj32/OliRWsgEghHz00Ufq0qWL6tevr6ysLLVo0cJ1JABhhpLt2OrteWqQmqA67JENACGhqKhIV199tRo3bqzFixeradOmriMBCEPc+OhYidevpDiP6xgAgH0SExM1bdo0NWvWjINmABw1VrId81mxPzYAhIAZM2bo6aefliS1b9+egg3gmFCyHfP7rejYAODWtGnT1KdPH02YMEElJSWu4wCIAJRsx3x+y0o2ADj01ltv6aqrrtI555yjuXPnKj6ee2QAHDtKtmM+axVjKNkA4MKECRM0YMAAXXDBBZozZ47S09NdRwIQISjZju3OL1FaUpzrGAAQlXJyctShQwfNnDlTtWuzlSqAwKFkO7ZpT6Ea10lyHQMAosrWrVslSbfeeqvmzp2rlJQUx4kARJqgl2xjTHdjzA/GmNXGmFGVPOZqY8xyY8z3xpiJwc4YLCVev7blFunEdEo2AATLc889p5NPPllff/21JMnjYRtVAIEX1H2yjTEeSWMkdZG0UdJSY8x71trlBzymlaR7JF1krd1jjGkYzIzBtGlvoayVTqxTy3UUAIgKTz75pO6880716dNHp59+uus4ACJYsFey20taba392VpbImmSpN6HPOYmSWOstXskyVq7PcgZg+ar9Xsk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SBlxWhETQzw/+FirVi1dccUVmjNnDgUbAAAgYqxkO4jZ+DuM5osvvtCmTZt09tln6w9/+IPvOAAAACmJku0giLNj1T/77DNlZWVp165d+ve//63atWv7jgQAAJCSKNkOAqu42cJv06ZNysrK0tatW7Vw4UIKNgAAgEeUbAexwCoeFrI/+ugjZWVl6auvvtLixYvVoUMH35EAAABSGiXbQWDjY1xk/PjxKioq0rJly9SuXTvfcQAAAFIeu4s4COLkxMexY8fqtddeo2ADAADECUq2g1ggGU8r2evWrVPnzp21ZcsW1ahRQ61atfKSAwAAAD/EuIiDwNNhNG+++aZycnJUq1YtFRUVqUmTJtGHAAAAwGGxku0g5mELv1WrVikrK0t16tRRQUGBWrduHennBwAAwNFRsh0EER9Gs2rVKmVnZyszM1OFhYVq2bJlZJ8bAAAAFUfJdhBEfKx606ZNdf7556uwsFDNmzeP7PMCAACgcijZDmIR7S7y5ptvat++fWrSpInmz5+vpk2bVvvnBAAAQNVRsh0EVtW+kr1o0SKdc845uu2226r18wAAACA8lGwHpeMi1ffxFyxYoIsuukinnXaabrjhhur7RAAAAAgVJdtBdY6LvPTSS7r44ot15plnavny5WrcuHG1fB4AAACEj5JdRdZa2WoaFykqKtKQIUPUrl07LV26VA0bNgz9cwAAAKD6cBhNFQW29MfqKNmZmZlavHixWrdurfr164f+8QEAAFC9WMmuolhZyw7zxMenn35a48ePlyS1a9eOgg0AAJCgKNlVFNjSkh3WYTSPP/64Bg8erEWLFikWi4XyMQEAAOAHJbuKykt2GMeqT5gwQb/97W/Vo0cPzZkzR+np6c4fEwAAAP5QsquofFzEdSb7oYce0vXXX6/evXtr9uzZql27dhjxAAAA4BElu4qCoPRH13GRY445Rv369dP06dNVs2bNEJIBAADAN0p2FX0/LlL5/621Vh999JEk6dprr9Xf/vY31ahRI8x4AAAA8IiSXUWxKj74aK3VTTfdpJ/+9Kdav369JMlU89HsAAAAiBYlu4qCKsxkW2s1YsQIjRkzRldeeaVat25dXfEAAADgESW7ispXsit6rHoQBBo2bJjGjx+v4cOH69FHH1VaGr/8AAAAyYiWV0XlJz5WdAu/559/XpMmTdKoUaP0l7/8hRER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\n",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn import metrics\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = 12, 12\n",
    "plt.xlabel('FPR',fontsize=15)\n",
    "plt.ylabel('TPR',fontsize=15)\n",
    "plt.plot([0,1], [0,1], 'k--')\n",
    "\n",
    "rf_predictions = rf.predict(X_test)\n",
    "# Probabilities for each class\n",
    "rf_probs = rf.predict_proba(X_test)[:, 1]\n",
    "fpr, tpr, _ = metrics.roc_curve(y_test, rf_probs)\n",
    "auc = metrics.auc(fpr, tpr)\n",
    "plt.plot(fpr, tpr, label='Logistic Regression+TfidfVectorizer: ' + '(AUC = %0.3f)'%auc)\n",
    "auc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train_valid, X_test_valid, y_train_valid, y_test_valid = train_test_split(X_train, y_train, test_size=0.3, random_state=49)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "forest_depth=[5,10,15,20]\n",
    "min_split=[2,5,10,20,50,100]\n",
    "maxAuc=0\n",
    "fd=0\n",
    "ms=0\n",
    "for maxDepth in forest_depth:\n",
    "    for minSplit in min_split:\n",
    "        rf = RandomForestClassifier(n_estimators = 500, random_state = 49, max_depth=maxDepth, min_samples_split=minSplit)\n",
    "        rf.fit(X_train_valid, y_train_valid)\n",
    "        rf_probs = rf.predict_proba(X_test_valid)[:, 1]\n",
    "        fpr, tpr, _ = metrics.roc_curve(y_test_valid, rf_probs)\n",
    "        auc = metrics.auc(fpr, tpr)\n",
    "        if maxAuc<auc:\n",
    "            maxAuc=auc\n",
    "            fd=maxDepth\n",
    "            ms=minSplit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9999958284667795\n"
     ]
    }
   ],
   "source": [
    "print(maxAuc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20\n"
     ]
    }
   ],
   "source": [
    "print(fd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n"
     ]
    }
   ],
   "source": [
    "print(ms)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "            max_depth=20, max_features='auto', max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, n_estimators=500, n_jobs=None,\n",
       "            oob_score=False, random_state=49, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf = RandomForestClassifier(n_estimators = 500, random_state = 49, max_depth=20)\n",
    "# Train the model on training data\n",
    "rf.fit(X_train_valid, y_train_valid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import metrics\n",
    "import matplotlib.pyplot as plt\n",
    "rf_probs = rf.predict_proba(X_test_valid)[:, 1]\n",
    "fpr, tpr, _ = metrics.roc_curve(y_test_valid, rf_probs)\n",
    "auc = metrics.auc(fpr, tpr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9999958284667795"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "auc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "rf_probs = rf.predict_proba(X_test)[:, 1]\n",
    "fpr, tpr, _ = metrics.roc_curve(y_test, rf_probs)\n",
    "auc = metrics.auc(fpr, tpr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.963639262747642"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "auc\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
